///**************************************************************************************
// *
// * @(#) LeChangeService.java
// * @Package com.jgdt.jgdtkasannong_university_gene_backend.service.test
// **************************************************************************************/
//package com.jgdt.jgdtkasannong_university_gene_backend.service.test;
//
//import com.jgdt.jgdtkasannong_university_gene_backend.config.video.lc.cloud.LeChangeConfig;
//import jakarta.xml.bind.DatatypeConverter;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.http.HttpResponse;
//import org.apache.http.client.methods.HttpPost;
//import org.apache.http.entity.StringEntity;
//import org.apache.http.impl.client.CloseableHttpClient;
//import org.apache.http.impl.client.HttpClients;
//import org.apache.http.util.EntityUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import java.nio.charset.StandardCharsets;
//import java.security.MessageDigest;
//import java.util.*;
//
//import com.fasterxml.jackson.databind.ObjectMapper;
//
//@Slf4j
//@Service
//public class LeChangeService {
//    public LeChangeConfig getConfig() {
//        return config;
//    }
//
//    @Autowired
//    private LeChangeConfig config;
//
//    @Autowired
//    private ObjectMapper objectMapper;
//
//    public String getAccessToken() throws Exception {
//        String url = config.getApiUrl() + "/openapi/accessToken";
//
//        // 1. 确保使用正确的参数结构
//        Map<String, Object> params = new HashMap<>();
//        params.put("appId", config.getAppId());
//        params.put("appSecret", config.getAppSecret());
//        params.put("system", new HashMap<String, String>() {{
//            put("ver", "1.0");
//            put("lang", "zh");
//            put("signature", ""); // 签名可为空
//        }});
//        params.put("signature", generateSignature(params, config.getAppSecret()));
//
//        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
//            HttpPost httpPost = new HttpPost(url);
//
//            // 2. 确保设置正确的请求头
//            httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");
//            httpPost.setHeader("Accept", "application/json");
//            log.info("params:"+params);
//            // 3. 确保参数转换为JSON字符串
//            StringEntity entity = new StringEntity(objectMapper.writeValueAsString(params), "UTF-8");
//            httpPost.setEntity(entity);
//
//            HttpResponse response = httpClient.execute(httpPost);
//            String responseBody = EntityUtils.toString(response.getEntity());
//
//            // 4. 添加详细的错误日志
//            log.debug("获取Token响应: {}", responseBody);
//
//            Map<String, Object> result = objectMapper.readValue(responseBody, Map.class);
//            if ("0".equals(result.get("code"))) {
//                return (String) ((Map) result.get("data")).get("accessToken");
//            } else {
//                throw new RuntimeException("获取AccessToken失败: " + result.get("msg") +
//                        ", 错误码: " + result.get("code"));
//            }
//        }
//    }
//
//    public String getKitToken(String accessToken) throws Exception {
//        String url = config.getApiUrl() + "/openapi/getKitToken";
//
//        Map<String, Object> params = new HashMap<>();
//        params.put("token", accessToken);
//        params.put("deviceId", config.getDeviceId());
//        params.put("channelId", config.getChannelId());
//        params.put("expireTime", 3600); // token有效期(秒)
//
//        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
//            HttpPost httpPost = new HttpPost(url);
//            httpPost.setHeader("Content-Type", "application/json");
//            httpPost.setEntity(new StringEntity(objectMapper.writeValueAsString(params)));
//
//            HttpResponse response = httpClient.execute(httpPost);
//            String responseBody = EntityUtils.toString(response.getEntity());
//
//            Map<String, Object> result = objectMapper.readValue(responseBody, Map.class);
//            if ("0".equals(result.get("code"))) {
//                return (String) ((Map) result.get("data")).get("kitToken");
//            } else {
//                throw new RuntimeException("获取KitToken失败: " + result.get("msg"));
//            }
//        }
//    }
//
//    public String captureImage(String accessToken) throws Exception {
//        String url = config.getApiUrl() + "/openapi/setDeviceSnapEnhanced";
//
//        Map<String, Object> params = new HashMap<>();
//        params.put("token", accessToken);
//        params.put("deviceId", config.getDeviceId());
//        params.put("channelId", config.getChannelId());
//
//        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
//            HttpPost httpPost = new HttpPost(url);
//            httpPost.setHeader("Content-Type", "application/json");
//            httpPost.setEntity(new StringEntity(objectMapper.writeValueAsString(params)));
//
//            HttpResponse response = httpClient.execute(httpPost);
//            String responseBody = EntityUtils.toString(response.getEntity());
//
//            Map<String, Object> result = objectMapper.readValue(responseBody, Map.class);
//            if ("0".equals(result.get("code"))) {
//                return (String) ((Map) result.get("data")).get("picUrl");
//            } else {
//                throw new RuntimeException("截图失败: " + result.get("msg"));
//            }
//        }
//    }
//
//    private String generateSignature(Map<String, Object> params, String appSecret) {
//        try {
//            // 1. 参数按key排序
//            List<String> keys = new ArrayList<>(params.keySet());
//            Collections.sort(keys);
//
//            // 2. 拼接参数字符串
//            StringBuilder sb = new StringBuilder();
//            for (String key : keys) {
//                Object value = params.get(key);
//                if (value != null && !"signature".equals(key)) {
//                    sb.append(key).append("=").append(value.toString()).append("&");
//                }
//            }
//            sb.append("appSecret=").append(appSecret);
//
//            // 3. MD5加密
//            MessageDigest md = MessageDigest.getInstance("MD5");
//            byte[] digest = md.digest(sb.toString().getBytes(StandardCharsets.UTF_8));
//            return DatatypeConverter.printHexBinary(digest).toLowerCase();
//        } catch (Exception e) {
//            throw new RuntimeException("生成签名失败", e);
//        }
//    }
//}
//
//
//
//
